In [2]:
%pylab inline
from pandas import Series, DataFrame
import pandas as pd
In [3]:
# Series, DataFrame 的 plot()方法 預設是繪製 線型圖
s = Series(np.random.randn(10).cumsum(), index = np.arange(0, 100, 10))
s.plot()
Out[3]:
In [4]:
# Series的索引會被作為subplot的 X軸,可以使用參數 use_index = False 來禁用該功能
# X軸的刻度可以透過 xticks 和 xlim 選向來調整
# Y軸的刻度可以透過 yticks 和 ylim 選向來調整
In [5]:
# DataFrame的 plot()方法會在subplot中為每個 column繪製一條線,並自動創建legend
df = DataFrame(np.random.randn(10, 4).cumsum(0),
index = np.arange(0, 100, 10),
columns = ['A', 'B', 'C', 'D'])
df.tail(3)
Out[5]:
In [6]:
df.plot()
Out[6]:
In [7]:
# 設定 kind = 'bar' 或 'barh' 即可繪製柱狀圖
# Series和 DataFrame的 索引會被當作subplot的 X軸(bar)或 Y軸(barh)
fig, axes = plt.subplots(2, 1)
data = Series(np.random.rand(16), index = list('abcedfghijklmnop'))
data.plot(ax = axes[0], kind = 'bar')
data.plot(ax = axes[1], kind = 'barh')
Out[7]:
In [8]:
df = DataFrame(np.random.rand(6, 4),
index = ['one', 'two', 'three', 'four', 'five', 'six'],
columns = pd.Index(['A', 'B', 'C', 'D'], name = 'Genus'))
df
# DataFrame的每一 row的值分為一組
Out[8]:
In [9]:
# DataFrame的每一 row的值分為一組
# columns 索引的 name屬性 被用來做為 legend的標題
df.plot(kind = 'bar')
Out[9]:
In [10]:
# 設定 stacked = True, 可繪製 堆積柱狀圖
df.plot(kind = 'barh', stacked = True)
Out[10]:
In [11]:
s = Series([2, 3, 5, 2, 5, 6, 7, 8, 9, 10, 13, 2, 3, 4, 7, 8, 9, 0, 0, 2, 2, 1])
# 用Series的 value_counts()直接繪製柱狀圖,表達每個數字出現的次數
vc = s.value_counts()
vc.plot(kind = 'bar')
Out[11]:
In [12]:
tips = pd.read_csv('../data/tips.csv')
tips[:5]
Out[12]:
In [13]:
# 用 crosstab()方法創建一個 交叉表,預設統計 發生的次數(計數)
party_counts = pd.crosstab(tips.day , tips['size'])
party_counts
Out[13]:
In [14]:
party_counts.plot(kind = 'bar')
Out[14]:
In [15]:
party_counts = party_counts.ix[:, 2:5]
party_counts.plot(kind = 'bar', stacked = True)
Out[15]:
In [16]:
party_counts
Out[16]:
In [17]:
party_counts = party_counts.div(party_counts.sum(1), axis = 0)
party_counts
Out[17]:
In [18]:
party_counts.sum(1)
Out[18]:
In [19]:
party_counts.plot(kind = 'bar', stacked = True)
Out[19]:
In [20]:
tips = pd.read_csv('../data/tips.csv')
tips[:5]
Out[20]:
In [21]:
# 可以用 plot(kind = 'hist') 來繪製直方圖
tips.total_bill.plot(kind = 'hist', bins = 50)
plt.title('total_bill')
Out[21]:
In [22]:
# 也可以用 hist() 來繪製直方圖
tips.total_bill.hist(bins = 50)
plt.title('total_bill')
Out[22]:
In [23]:
# tip比例 直方圖
tip_ratios = (tips.tip / tips.total_bill)
tip_ratios.hist(bins = 50)
plt.title('tip ratio')
Out[23]:
In [24]:
macro = pd.read_csv('../data/macrodata.csv')
macro[:5]
Out[24]:
In [25]:
data = macro[['cpi', 'm1', 'tbilrate', 'unemp']]
data[:5]
Out[25]:
In [26]:
# diff(): 以上下元素的差異值填入
trans_data = np.log(data).diff().dropna()
trans_data[:5]
Out[26]:
In [27]:
# plt.scatter()可以繪製散佈圖,標示每一個資料row的 兩個columns的數據分布
plt.scatter(trans_data.m1, trans_data.unemp)
plt.title('Changes in log({0}) vs. log({1})'.format('m1', 'unemp'))
Out[27]:
In [28]:
trans_data.plot.scatter('m1', 'unemp')
Out[28]:
In [29]:
# pandas 提供了 scatter_matrix()函數,方便由DataFrame繪製散佈圖
# 會自動的產生各個columns之間的 scatter diagram
pd.scatter_matrix(trans_data, color = 'k', alpha = 0.3)
Out[29]:
In [ ]: